/*
 * 字符串排序
 *
 * 题目链接：https://programming.pku.edu.cn/probset/ce201cde75084b56ad4544229996fbf2/797bc56cb052405f87eba2b246bd9c50/
 * 作者：lyazj <seeson@pku.edu.cn>
 *
 * 本题所需主要知识点：
 *   - 字符数组
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char buf[1000][1001], *ptr[1000];

int strpcmp(const void *p_in, const void *q_in)
{
  const char *const *p = (const char *const *)p_in;
  const char *const *q = (const char *const *)q_in;
  return strcmp(*p, *q);
}

int main(void)
{
  // 输入，并初始化字符指针数组 ptr
  int n;
  scanf("%d", &n);
  for(int i = 0; i < n; ++i) {
    scanf("%s", buf[i]);
    ptr[i] = buf[i];
  }

  // 使用自己熟悉的方法对字符指针数组 ptr 排序
  qsort(ptr, n, sizeof(*ptr), strpcmp);

  // 输出
  for(int i = 0; i < n; ++i) puts(ptr[i]);
  return 0;
}
